:art: Support maintenance_tracking_info_subscribe

huangqimin001 лет %!s(int64=3): %!d(string=назад)
Родитель
Сommit
77224d884a
3 измененных файлов с 41 добавлено и 5 удалено
  1. 33 0
      api/maintenance_views.py
  2. 1 0
      api/urls.py
  3. 7 5
      utils/kuaidi/subscribe.py

+ 33 - 0
api/maintenance_views.py

@@ -13,6 +13,7 @@ from TimeConvert import TimeConvert as tc
13 13
 from maintenance.models import ExpressCompanyInfo, MaintenaceInfo
14 14
 from utils.admin_utils import is_admin, is_maintenanceman
15 15
 from utils.error.errno_utils import MaintenanceStatusCode
16
+from utils.kuaidi.subscribe import KuaiDi100 as KuaiDi100Subscribe
16 17
 from utils.kuaidi.synquery import KuaiDi100
17 18
 
18 19
 
@@ -55,6 +56,8 @@ def maintenance_add(request):
55 56
         maintenance_status_at={maintenance_status: tc.utc_datetime()}
56 57
     )
57 58
 
59
+    maintenance_tracking_info_subscribe(maintenance, 'tracking')
60
+
58 61
     return response(data={
59 62
         'maintenance_id': maintenance.id,
60 63
     })
@@ -107,6 +110,9 @@ def maintenance_update(request):
107 110
     if user_id != maintenance.user_id and not is_admin(brand_id, admin_id):
108 111
         return response(MaintenanceStatusCode.MAINTENACE_PERMISSION_DENIED)
109 112
 
113
+    old_tracking_number = maintenance.tracking_number
114
+    old_back_tracking_number = maintenance.back_tracking_number
115
+
110 116
     if name:
111 117
         maintenance.name = name
112 118
     if phone:
@@ -146,6 +152,11 @@ def maintenance_update(request):
146 152
         maintenance.maintenance_status_at = maintenance_status_at
147 153
     maintenance.save()
148 154
 
155
+    if tracking_number and tracking_number != old_tracking_number:
156
+        maintenance_tracking_info_subscribe(maintenance, 'tracking')
157
+    if back_tracking_number and back_tracking_number != old_back_tracking_number:
158
+        maintenance_tracking_info_subscribe(maintenance, 'back_tracking')
159
+
149 160
     return response()
150 161
 
151 162
 
@@ -232,3 +243,25 @@ def maintenance_tracking_info(request):
232 243
         'type': type_,
233 244
         'tracking_info': tracking_info,
234 245
     })
246
+
247
+
248
+def maintenance_tracking_info_subscribe(maintenance, type_):
249
+    callbackurl = '{}/maintenance/tracking/info/callback?maintenance_id={}&type={}'.format(settings.DOMAIN, maintenance.pk, type_)
250
+    if type_ == 'tracking':
251
+        express_com = maintenance.express_com
252
+        tracking_number = maintenance.tracking_number
253
+        phone = maintenance.phone
254
+    else:
255
+        express_com = maintenance.back_express_com
256
+        tracking_number = maintenance.back_tracking_number
257
+        phone = maintenance.phone
258
+    res = KuaiDi100Subscribe().submit(express_com, tracking_number, phone=phone, callbackurl=callbackurl)
259
+    print(res)
260
+
261
+
262
+@logit
263
+def maintenance_tracking_info_callback(request):
264
+    maintenance_id = request.GET.get('maintenance_id', '')
265
+    type_ = request.GET.get('type', 'tracking')  # tracking / back_tracking
266
+
267
+    return response()

+ 1 - 0
api/urls.py

@@ -279,4 +279,5 @@ urlpatterns += [
279 279
     url(r'^admin/maintenance/list$', maintenance_views.maintenance_list, name='maintenance_list'),
280 280
 
281 281
     url(r'^maintenance/tracking/info$', maintenance_views.maintenance_tracking_info, name='maintenance_tracking_info'),
282
+    url(r'^maintenance/tracking/info/callback$', maintenance_views.maintenance_tracking_info_callback, name='maintenance_tracking_info_callback'),
282 283
 ]

+ 7 - 5
utils/kuaidi/subscribe.py

@@ -3,14 +3,15 @@
3 3
 import json
4 4
 
5 5
 import requests
6
+from django.conf import settings
6 7
 
7 8
 
8 9
 class KuaiDi100:
9 10
     def __init__(self):
10
-        self.key = ''  # TODO 客户授权key
11
+        self.key = settings.KUAIDI00.get('key', '')  # TODO 客户授权key
11 12
         self.url = 'https://poll.kuaidi100.com/poll'  # 请求地址
12 13
 
13
-    def submit(self, com, num, phone, ship_from, ship_to):
14
+    def submit(self, com, num, phone=None, ship_from=None, ship_to=None, callbackurl=None):
14 15
         """
15 16
         物流轨迹订阅
16 17
         :param com: 快递公司编码
@@ -27,7 +28,8 @@ class KuaiDi100:
27 28
             'to': ship_to,
28 29
             'key': self.key,
29 30
             'parameters': {
30
-                'callbackurl': 'https://www.baidu.com/kd100/callback',  # 回调接口的地址。如果需要在推送信息回传自己业务参数,可以在回调地址URL后面拼接上去,例如:https://www.baidu.com/kd100/callback?orderId=123
31
+                'callbackurl': callbackurl,
32
+                # 'callbackurl': 'https://www.baidu.com/kd100/callback',  # 回调接口的地址。如果需要在推送信息回传自己业务参数,可以在回调地址URL后面拼接上去,例如:https://www.baidu.com/kd100/callback?orderId=123
31 33
                 'salt': None,  # 签名用随机字符串。32位自定义字符串。添加该参数,则推送的时候会增加sign给贵司校验消息的可靠性
32 34
                 'resultv2': '1',  # 添加此字段表示开通行政区域解析功能。0:关闭(默认),1:开通行政区域解析功能
33 35
                 'autoCom': '0',  # 添加此字段且将此值设为1,则表示开始智能判断单号所属公司的功能,开启后,company字段可为空,即只传运单号(number字段),我方收到后会根据单号判断出其所属的快递公司(即company字段)。建议只有在无法知道单号对应的快递公司(即company的值)的情况下才开启此功能
@@ -48,5 +50,5 @@ class KuaiDi100:
48 50
         return requests.post(self.url, req_params).text  # 发送请求
49 51
 
50 52
 
51
-result = KuaiDi100().submit('yuantong', 'YT9693083639795', '', '江门市', '深圳市')
52
-print(result)
53
+# result = KuaiDi100().submit('yuantong', 'YT9693083639795', '', '江门市', '深圳市')
54
+# print(result)